package corewarsxxi.gui;

import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;

/**
 * Classe IntTextField cria um InputField que só aceita valores numéricos.
 * 
 * Codigo retirado de http://www.java2s.com/Code/Java/Swing-JFC/Textfieldonlyacceptsnumbers.htm
 * @author Unkown
 */

public class IntTextField extends JTextField
{
    public IntTextField(int defval, int size) {
        super("" + defval, size);
    }

    @Override
    protected Document createDefaultModel() {
        return new IntTextDocument();
    }

    @Override
    public boolean isValid() {
        try {
                Integer.parseInt(getText());
                return true;
        } catch (Exception e) {
                return false;
        }
    }

    public int getValue() {
        try {
            return Integer.parseInt(getText());
        } catch (Exception e) {
            return 0;
        }
    }

    class IntTextDocument extends PlainDocument {
        public void insertString(int offs, String str, AttributeSet a)
        throws BadLocationException {
            if (str == null)
                return;
            
            String oldString = getText(0, getLength());
            String newString = oldString.substring(0, offs) + str
            + oldString.substring(offs);
            try {
                Integer.parseInt(newString + "0");
                super.insertString(offs, str, a);
            } catch (Exception e) {
            }
        }
    }
}